package com.dbuil.bleshoes;

import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.view.Gravity;

import androidx.multidex.MultiDex;

import com.blankj.utilcode.util.AppUtils;
import com.blankj.utilcode.util.LogUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.blankj.utilcode.util.Utils;
import com.dbuil.bleshoes.push.CustomPushReceiver;
import com.lzy.okgo.OkGo;
import com.scwang.smart.refresh.header.MaterialHeader;
import com.scwang.smart.refresh.layout.SmartRefreshLayout;
import com.tencent.bugly.crashreport.CrashReport;
import com.xuexiang.keeplive.KeepLive;
import com.xuexiang.keeplive.config.ForegroundNotification;
import com.xuexiang.keeplive.config.ForegroundNotificationClickListener;
import com.xuexiang.keeplive.config.KeepLiveService;
import com.xuexiang.xpush.XPush;
import com.xuexiang.xpush.core.dispatcher.impl.Android26PushDispatcherImpl;
import com.xuexiang.xpush.jpush.JPushClient;
import com.xuexiang.xui.XUI;

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        Utils.init(this);
        initToast();
        initLog();

        OkGo.getInstance().init(this);
        CrashReport.initCrashReport(this, "3787294435", true);


        XUI.init(this); //初始化UI框架
        XUI.debug(true);  //开启UI框架调试日志

        initPush();
        initKeepLive();


    }


    /**
     * 初始化推送
     */
    private void initPush() {
        XPush.debug(BuildConfig.DEBUG);

        //PushPlatformUtils.initPushClient(this);
        XPush.init(this, new JPushClient());

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            //Android8.0静态广播注册失败解决方案一：动态注册
//            XPush.registerPushReceiver(new CustomPushReceiver());

            //Android8.0静态广播注册失败解决方案二：修改发射器
            XPush.setIPushDispatcher(new Android26PushDispatcherImpl(CustomPushReceiver.class));
        }

        XPush.register();
    }

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }

    private void initLog() {
        LogUtils.getConfig().setLogSwitch(true);
        LogUtils.getConfig().setGlobalTag(Constant.APPLOG);
        LogUtils.getConfig().setLog2FileSwitch(true);
        LogUtils.getConfig().setSaveDays(7);
    }
    private void initToast() {
        //吐司的位置
        ToastUtils.setGravity(Gravity.CENTER, 0, 50);
        //背景颜色
        ToastUtils.setBgColor(getResources().getColor(R.color.toast));
        //字体颜色
        ToastUtils.setMsgColor(getResources().getColor(R.color.white));
        //字体大小
        ToastUtils.setMsgTextSize(16);
    }

    static {
        //设置全局的Header构建器
        SmartRefreshLayout.setDefaultRefreshHeaderCreator((context, layout) -> {
            layout.setPrimaryColorsId(R.color.colorPrimary);//全局设置主题颜色
            return new MaterialHeader(context);//.setTimeFormat(new DynamicTimeFormat("更新于 %s"));//指定为经典Header，默认是 贝塞尔雷达Header
        });

    }


    /**
     * 初始化保活，配置完成后即可实现程序的保活
     */
    private void initKeepLive() {
        //定义前台服务的默认样式。即标题、描述和图标
        ForegroundNotification notification = new ForegroundNotification("Debui", "Debui正在运行中...", R.mipmap.ic_launcher,
                //定义前台服务的通知点击事件
                (context, intent) -> {
                    //可以做一些唤醒程序的操作，这里只是简单地启动了应用
                    AppUtils.launchApp(getPackageName());
                    // ActivityUtils.startActivity(ShareTestActivity.class);
                })
                //要想不显示通知，可以设置为false，默认是false
                .setIsShow(false);
        //启动保活服务
        KeepLive.startWork(this, KeepLive.RunMode.ROGUE, notification,
                //你需要保活的服务，如socket连接、定时任务等，建议不用匿名内部类的方式在这里写
                new KeepLiveService() {
                    /**
                     * 运行中
                     * 由于服务可能会多次自动启动，该方法可能重复调用
                     */
                    @Override
                    public void onWorking() {
                        //可以做一些保活的处理，比如说恢复推送连接等
                        LogUtils.i("KeepLive==onWorking");
                    }

                    /**
                     * 服务终止
                     * 由于服务可能会被多次终止，该方法可能重复调用，需同onWorking配套使用，如注册和注销broadcast
                     */
                    @Override
                    public void onStop() {
                        //该回调方法可能会不回调

                        LogUtils.i("KeepLive==onStop");
                    }
                }
        );
    }


}
